/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.osiris.persistence;

import java.io.Serializable;
import java.util.Date;

import javax.annotation.Resource;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;

import org.osiris.client.model.RiesgoViewBean;
import org.osiris.persistence.controllers.RiesgoInterface;
import org.osiris.server.utils.AppContext;
import org.springframework.context.ApplicationContext;

/**
 *
 * @author amartinez
 */
@Entity
@Table(name = "Riesgo")
@NamedQueries({@NamedQuery(name = "Riesgo.findAll", query = "SELECT r FROM Riesgo r"), @NamedQuery(name = "Riesgo.findByIdRiesgo", query = "SELECT r FROM Riesgo r WHERE r.idRiesgo = :idRiesgo"), @NamedQuery(name = "Riesgo.findByNombre", query = "SELECT r FROM Riesgo r WHERE r.nombre = :nombre"), @NamedQuery(name = "Riesgo.findByProbabilidad", query = "SELECT r FROM Riesgo r WHERE r.probabilidad = :probabilidad"), @NamedQuery(name = "Riesgo.findByImpacto", query = "SELECT r FROM Riesgo r WHERE r.impacto = :impacto"), @NamedQuery(name = "Riesgo.findByFechaalta", query = "SELECT r FROM Riesgo r WHERE r.fechaalta = :fechaalta"), @NamedQuery(name = "Riesgo.findByUsuarioalta", query = "SELECT r FROM Riesgo r WHERE r.usuarioalta = :usuarioalta"), @NamedQuery(name = "Riesgo.findByDescripcion", query = "SELECT r FROM Riesgo r WHERE r.descripcion = :descripcion")})
public class Riesgo implements Serializable {
    

	@Transient
	@Resource
	private RiesgoInterface riesgoDAO;
	@Transient
	private ApplicationContext ctx = AppContext.getApplicationContext();

	public void guardar() {
		if (riesgoDAO == null) {
			riesgoDAO = (RiesgoInterface) ctx.getBean("RiesgoJpaController");
		}
		try {
			this.riesgoDAO.create(this);
		} catch (Exception e1) {
			e1.printStackTrace();
		}
	}
   
    public Riesgo(Requisito idReq,String descripcion,String nombre, Long usuario, String impacto, String probabilidad) {
        this.nombre = nombre;
        this.setIdRequisito(idReq);
        this.fechaalta = new Date();
        this.usuarioalta = usuario;
        this.descripcion = descripcion;
        this.impacto = Double.parseDouble(impacto);
        this.probabilidad = Double.parseDouble(probabilidad);
    }
    
        private static final long serialVersionUID = 1L;
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Basic(optional = false)
        @Column(name = "idRiesgo")
        private Long idRiesgo;
        @Basic(optional = false)
        @Column(name = "Descripcion")
        private String descripcion;
        @Basic(optional = false)
        @Column(name = "Fecha_alta")
        @Temporal(TemporalType.TIMESTAMP)
        private Date fechaalta;
        @Basic(optional = false)
        @Column(name = "Impacto")
        private double impacto;
        @Basic(optional = false)
        @Column(name = "Nombre")
        private String nombre;
        @Basic(optional = false)
        @Column(name = "Probabilidad")
        private double probabilidad;
        @Basic(optional = false)
        @Column(name = "Usuario_alta")
        private long usuarioalta;
        @JoinColumn(name = "idRequisito", referencedColumnName = "idRequisito")
        @ManyToOne(optional = false, fetch = FetchType.LAZY)
        private Requisito idRequisito;

        public Riesgo() {
        }

        public Riesgo(Long idRiesgo) {
            this.idRiesgo = idRiesgo;
        }

        public Riesgo(Long idRiesgo, String descripcion, Date fechaalta, double impacto, String nombre, double probabilidad, long usuarioalta) {
            this.idRiesgo = idRiesgo;
            this.descripcion = descripcion;
            this.fechaalta = fechaalta;
            this.impacto = impacto;
            this.nombre = nombre;
            this.probabilidad = probabilidad;
            this.usuarioalta = usuarioalta;
        }

        public Long getIdRiesgo() {
            return idRiesgo;
        }

        public void setIdRiesgo(Long idRiesgo) {
            this.idRiesgo = idRiesgo;
        }

        public String getDescripcion() {
            return descripcion;
        }

        public void setDescripcion(String descripcion) {
            this.descripcion = descripcion;
        }

        public Date getFechaalta() {
            return fechaalta;
        }

        public void setFechaalta(Date fechaalta) {
            this.fechaalta = fechaalta;
        }

        public double getImpacto() {
            return impacto;
        }

        public void setImpacto(double impacto) {
            this.impacto = impacto;
        }

        public String getNombre() {
            return nombre;
        }

        public void setNombre(String nombre) {
            this.nombre = nombre;
        }

        public double getProbabilidad() {
            return probabilidad;
        }

        public void setProbabilidad(double probabilidad) {
            this.probabilidad = probabilidad;
        }

        public long getUsuarioalta() {
            return usuarioalta;
        }

        public void setUsuarioalta(long usuarioalta) {
            this.usuarioalta = usuarioalta;
        }

        public Requisito getIdRequisito() {
            return idRequisito;
        }

        public void setIdRequisito(Requisito idRequisito) {
            this.idRequisito = idRequisito;
        }

        @Override
        public int hashCode() {
            int hash = 0;
            hash += (idRiesgo != null ? idRiesgo.hashCode() : 0);
            return hash;
        }

        @Override
        public boolean equals(Object object) {
            // TODO: Warning - this method won't work in the case the id fields are not set
            if (!(object instanceof Riesgo)) {
                return false;
            }
            Riesgo other = (Riesgo) object;
            if ((this.idRiesgo == null && other.idRiesgo != null) || (this.idRiesgo != null && !this.idRiesgo.equals(other.idRiesgo))) {
                return false;
            }
            return true;
        }

        @Override
        public String toString() {
            return "org.osiris.persistence.Riesgo[idRiesgo=" + idRiesgo + "]";
        }
        
        public RiesgoViewBean toView(){
        	RiesgoViewBean res=new RiesgoViewBean();
        	res.setid(this.getIdRiesgo());
        	res.setdescripcion(this.getDescripcion());
        	res.setimpacto(this.getImpacto());
        	res.setfechaalta(this.getFechaalta().toString());
        	res.setexposicion(((int)(this.getProbabilidad()*this.getImpacto()))+"");
        	res.setusuario(this.getUsuarioalta()+"");
        	res.setprobabilidad(this.getProbabilidad());
        	res.setnombre(this.getNombre());
        	return res;
        }

    

}
